page.open   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 1
nc 1
nop 0
1
var system = require('system');
2
3
/**
4
 * Wait until the test condition is true or a timeout occurs. Useful for waiting
5
 * on a server response or for a ui change (fadeIn, etc.) to occur.
6
 *
7
 * @param testFx javascript condition that evaluates to a boolean,
8
 * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
9
 * as a callback function.
10
 * @param onReady what to do when testFx condition is fulfilled,
11
 * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
12
 * as a callback function.
13
 * @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
14
 */
15
function waitFor(testFx, onReady, timeOutMillis) {
16
    var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 30001, //< Default Max Timeout is 3s
17
        start = new Date().getTime(),
18
        condition = false,
19
        interval = setInterval(function() {
20
            if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
21
                // If not time-out yet and condition not yet fulfilled
22
                condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
0 ignored issues
show
Security Performance introduced by
Calls to eval are slow and potentially dangerous, especially on untrusted code. Please consider whether there is another way to achieve your goal.
Loading history...
23
            } else {
24
                if(!condition) {
25
                    // If condition still not fulfilled (timeout but condition is 'false')
26
                    console.log("'waitFor()' timeout");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
27
                    phantom.exit(1);
0 ignored issues
show
Bug introduced by
The variable phantom seems to be never declared. If this is a global, consider adding a /** global: phantom */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
28
                } else {
29
                    // Condition fulfilled (timeout and/or condition is 'true')
30
                    console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
31
                    typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
0 ignored issues
show
Security Performance introduced by
Calls to eval are slow and potentially dangerous, especially on untrusted code. Please consider whether there is another way to achieve your goal.
Loading history...
32
                    clearInterval(interval); //< Stop this interval
33
                }
34
            }
35
        }, 100); //< repeat check every 100ms
36
};
37
38
39
if (system.args.length !== 2) {
40
    console.log('Usage: run-jasmine.js URL');
41
    phantom.exit(1);
42
}
43
44
var page = require('webpage').create();
45
46
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
47
page.onConsoleMessage = function(msg) {
48
    console.log(msg);
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
49
};
50
51
page.open(system.args[1], function(status){
52
    if (status !== "success") {
53
        console.log("Unable to access network");
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
54
        phantom.exit();
0 ignored issues
show
Bug introduced by
The variable phantom seems to be never declared. If this is a global, consider adding a /** global: phantom */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
55
    } else {
56
        waitFor(function(){
57
            return page.evaluate(function(){
58
                return document.body.querySelector('.symbolSummary .pending') === null
59
            });
60
        }, function(){
61
            var exitCode = page.evaluate(function(){
62
                console.log('');
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
63
                console.log(document.body.querySelector('.description').innerText);
64
                var list = document.body.querySelectorAll('.results > #details > .specDetail.failed');
65
                if (list && list.length > 0) {
66
                  console.log('');
67
                  console.log(list.length + ' test(s) FAILED:');
68
                  for (i = 0; i < list.length; ++i) {
0 ignored issues
show
Bug introduced by
The variable i seems to be never declared. Assigning variables without defining them first makes them global. If this was intended, consider making it explicit like using window.i.
Loading history...
69
                      var el = list[i],
70
                          desc = el.querySelector('.description'),
71
                          msg = el.querySelector('.resultMessage.fail');
72
                      console.log('');
73
                      console.log(desc.innerText);
74
                      console.log(msg.innerText);
75
                      console.log('');
76
                  }
77
                  return 1;
78
                } else {
79
                  console.log(document.body.querySelector('.alert > .passingAlert.bar').innerText);
80
                  return 0;
81
                }
82
            });
83
            phantom.exit(exitCode);
0 ignored issues
show
Bug introduced by
The variable phantom seems to be never declared. If this is a global, consider adding a /** global: phantom */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
84
        });
85
    }
86
});
87